$Description$
给定正整数序列$a_1,a_2,\cdots ,a_n$。
$1.$计算其最长不下降子序列的长度$s$。
$2.$计算从给定的序列中最多可取出多少个长度为$s$的不下降子序列。
$3.$如果允许在取出的序列中多次使用$x_1$和$x_n$,则从给定序列中最多可取出多少个长度为$s$的不下降子序列。
$Solution$
首先动态规划求出$f_{i}$,表示以第$i$位为开头的最长不下降子序列的长度,求出最长不下降子序列长度$W$。
把序列每位$i$拆成两个点$i_1$和$i_2$,从$i_1~$到$i_2~$连接一条容量为$1$的边。
如果序列第$i$位有$f_{i}=W$,从$s$到$i_{1}~$连接一条容量为$1$的有向边。
如果$f_i=1$,从$i_2~$到$~t~$连接一条容量为1的有向边。
如果$j>i$且$a_i<a_j$且$f_j+1=f_i$,从$i_2~$到$j_1~$连接一条容量为$1$的有向边。
第二问直接求最大流即可
对于第三问,要求$a_1$和$a_n$可以重复使用,只需取消这两个点相关边的流量限制即可,具体操作只需把$(1_1,1_2)(n_1,n_2)(s,1_1)(n_2,t)$四条边权值改成$inf$,再跑最大流即可
$Code$
1 |
|